﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using IPMS.Models;
using System.Web.Profile;
using System.IO;
namespace IPMS.Controllers
{
    public class PackageController : Controller
    {
        PackageModel packageModel = new PackageModel();
        ProjectModel projectModel = new ProjectModel();
        DepartmentModel departmentModel = new DepartmentModel();
        UserModel userModel = new UserModel();
        BidderModel bidderModel = new BidderModel();
        
        //
        // GET: /Package/list
        [Authorize]
        public ActionResult List(int projectID)
        {
            //kiểm tra xem user có quyền vào trang này không
            try{
                ProfileBase profile = ProfileBase.Create(User.Identity.Name);
                int userID = Convert.ToInt32(profile["ID"]);
                if (projectModel.CheckUserPermissionOnProject(projectID, userID))
                {
                    Project project = this.projectModel.GetProjectByID(projectID);
                    ViewData["Project"] = project;
                    return View(this.packageModel.GetListPackage(projectID));
                }
                else
                {
                    ViewData["Error"] = IPMS.Library.ErrorConstant.PermissionError.USER_ON_PROJECT_ERROR;
                    return View();
                }
            }
            catch(Exception ex){
                return View();
            }
        }
        //get create package
        [Authorize]
        public ActionResult Create(int projectID)
        {
            // lấy thông tin dự án
            Project project = this.projectModel.GetProjectByID(projectID);
            ViewData["Project"] = project;
            //lấy ddl cấp phê duyệt
            ViewData["ApproveLevel"] = from d in this.departmentModel.GetAllDepartments()
                                           select new SelectListItem
                                               {
                                                   Text = d.Name,
                                                   Value = d.ID.ToString(),
                                                   Selected = (d.ID == project.DepartmentID)
                                               };
            //lấy ddl người giám sát
            ViewData["SuperVisiorID"] = from u in this.userModel.GetListSuperVisior()
                                            select new SelectListItem
                                            {
                                                Text = u.Fullname,
                                                Value = u.ID.ToString()
                                            };
            
            //lấy ddl hình thức thầu
           ViewData["BiddingTypeID"] = from bt in this.packageModel.GetAllBiddingTypes()
                                            select new SelectListItem
                                            {
                                                Text = bt.Name,
                                                Value = bt.ID.ToString()
                                            };
            
            return View(); 
        }

        [HttpPost]
        [Authorize]
        public ActionResult Create(Package package, int projectID)
        {
            Project project;
            if (ModelState.IsValid)
            {
                package.ProjectID = projectID;
                int identity = this.packageModel.CreatePackage(package);
                if (identity > 0)
                {
                    ViewData["Warning"] = IPMS.Library.WarningConstaint.PackageWarning.CREATE_SUCCESS;
                    return RedirectToAction("Details", new { id = identity });
                }
                else
                {

                    project = this.projectModel.GetProjectByID(projectID);
                    ViewData["Project"] = project;
                    //lấy ddl cấp phê duyệt
                    
                    ViewData["ApproveLevel"] = from d in this.departmentModel.GetAllDepartments()
                                               select new SelectListItem
                                               {
                                                   Text = d.Name,
                                                   Value = d.ID.ToString()
                                               };
                    //lấy ddl người giám sát
                    ViewData["SuperVisiorID"] = from u in this.userModel.GetListSuperVisior()
                                                select new SelectListItem
                                                {
                                                    Text = u.Fullname,
                                                    Value = u.ID.ToString()
                                                };

                    //lấy ddl hình thức thầu
                    ViewData["BiddingTypeID"] = from bt in this.packageModel.GetAllBiddingTypes()
                                                select new SelectListItem
                                                {
                                                    Text = bt.Name,
                                                    Value = bt.ID.ToString()
                                                };
                    return View(package);

                }
            }
            else
            {
                project = this.projectModel.GetProjectByID(projectID);
                ViewData["Project"] = project;
                //lấy ddl cấp phê duyệt
                IList<SelectListItem> slcApproveLevel= (from d in this.departmentModel.GetAllDepartments()
                                           select new SelectListItem
                                           {
                                               Text = d.Name,
                                               Value = d.ID.ToString()
                                           }).ToList();
                //slcApproveLevel.Add(new SelectListItem { Text = "--- Chọn cấp phê duyệt ---", Value = "0", Selected = true });
                ViewData["ApproveLevel"] = slcApproveLevel;
                //lấy ddl người giám sát
                ViewData["SuperVisiorID"] = from u in this.userModel.GetListSuperVisior()
                                            select new SelectListItem
                                            {
                                                Text = u.Fullname,
                                                Value = u.ID.ToString()
                                            };

                //lấy ddl hình thức thầu
                ViewData["BiddingTypeID"] = from bt in this.packageModel.GetAllBiddingTypes()
                                            select new SelectListItem
                                            {
                                                Text = bt.Name,
                                                Value = bt.ID.ToString()
                                            };
                return View(package);
            }
            
        }
        [Authorize]
        public ActionResult Details(int id)
        {
            Package package = this.packageModel.GetPackageByID(id);
            ProfileBase profile = ProfileBase.Create(User.Identity.Name);
            if (this.packageModel.CheckUserPackagePermission(Convert.ToInt32(profile["ID"]), id))
            {
                ViewData["Approve"] = true;
            }
            return View(package);
        }
        [HttpPost]
        [Authorize]
        public ActionResult Details(FormCollection form, int id)
        {
            Package package = this.packageModel.GetPackageByID(id);
            ProfileBase profile = ProfileBase.Create(User.Identity.Name);
            if (this.packageModel.ApprovePackage(id,(int) profile["ID"]))
            {
                ViewData["Warning"] = "Gói thầu đã được phê duyệt!";

            }
            else
            {
                ViewData["Warning"] = "Không thể phê duyệt gói thầu do có lỗi phát sinh!";
            }
            return View(package);
        }
        [Authorize]
        public ActionResult Update(int id)
        {
            return View();
        }

        [Authorize]
        public ActionResult ListInviting(int packageID)
        {
            Package package = this.packageModel.GetPackageByID(packageID);
            ViewData["Package"] = package;
            List<BiddingInviting> lstInviting = this.packageModel.GetListInviting(packageID);
            return View(lstInviting);
        }
        [Authorize]
        public ActionResult CreateInviting(int packageID)
        {
            // lấy thông tin dự án
            Package package = this.packageModel.GetPackageByID(packageID);
            ViewData["Package"] = package;
            //lấy ddl cấp phê duyệt
            ViewData["ApproveLevel"] = from d in this.departmentModel.GetAllDepartments()
                                       select new SelectListItem
                                       {
                                           Text = d.Name,
                                           Value = d.ID.ToString(),
                                       };
            //Nếu không phải đấu thầu rộng rãi thì mới lấy danh sách nhà thầu
            if (package.BiddingTypeID != 1)
            {
                ViewData["Bidders"] = this.bidderModel.GetListBidder();
            }
            return View();
        }
        [Authorize]
        [HttpPost]
        public ActionResult CreateInviting(BiddingInviting inviting, int packageID, HttpPostedFileBase documentURL)
        {
            Package package = this.packageModel.GetPackageByID(packageID); ;
            //nếu dữ liệu submit hợp lệ
            if (ModelState.IsValid)
            {
  
                inviting.PackageID = packageID;
                //lấy mã nhà thầu
                string[] bidderIDs = null;
                if (Request.Form["chkID"] != null && Request.Form["chkID"].Count() > 0)
                {
                    bidderIDs = new string[Request.Form["chkID"].Count()];
                    for (int i = 0; i < Request.Form["chkID"].Count(); i++)
                    {
                        if (Request.Form["chkID"][i] != ',')
                        {
                            bidderIDs[i] = Request.Form["chkID"][i].ToString();
                        }
                    }
                }

                //upload file đồng thời gán lại đường dẫn cho thông tin mời thầu
                string newFileName = "HSMT Gói thầu " + package.DecisionNumber + Path.GetExtension(documentURL.FileName);
                string fileURL = Library.Helper.GetDomainURL() + "/upload/hsmt/" + newFileName;
                inviting.DocumentURL = fileURL;
                int identity = this.packageModel.CreateInviting(inviting, bidderIDs);
                //nếu thêm thành công
                if (identity > 0)
                {
                    documentURL.SaveAs(Request.PhysicalApplicationPath+ "upload\\hsmt\\"+ newFileName);
                    ViewData["Warning"] = Library.WarningConstaint.PackageWarning.CREATE_INVITING_SUCCESS;
                    return RedirectToAction("InvitingDetails", new { id = identity });
                }
                //nếu thêm không thành công
                else
                {
                    ViewData["Warning"] = Library.WarningConstaint.PackageWarning.CREATE_INVITING_ERROR;
                    // lấy thông tin dự án
                    
                    ViewData["ApproveLevel"] = from d in this.departmentModel.GetAllDepartments()
                                               select new SelectListItem
                                               {
                                                   Text = d.Name,
                                                   Value = d.ID.ToString(),
                                                   Selected = (d.ID == inviting.ApproveLevel)
                                               };
                    //Nếu không phải đấu thầu rộng rãi thì mới lấy danh sách nhà thầu
                    if (package.BiddingTypeID != 1)
                    {
                        ViewData["Bidders"] = this.bidderModel.GetListBidder();
                    }
                    return View(inviting);
                }
            }
            else
            {
                // lấy thông tin dự án
                ViewData["Warning"] = Library.WarningConstaint.PackageWarning.CREATE_INVITING_ERROR;
                package = this.packageModel.GetPackageByID(packageID);
                ViewData["Package"] = package;
                //lấy ddl cấp phê duyệt
                ViewData["ApproveLevel"] = from d in this.departmentModel.GetAllDepartments()
                                           select new SelectListItem
                                           {
                                               Text = d.Name,
                                               Value = d.ID.ToString(),
                                               Selected = (d.ID == inviting.ApproveLevel)
                                           };
                //Nếu không phải đấu thầu rộng rãi thì mới lấy danh sách nhà thầu
                if (package.BiddingTypeID != 1)
                {
                    ViewData["Bidders"] = this.bidderModel.GetListBidder();
                }
                return View(inviting);
            }
            
        }

    }
}
